23 - 3.2 Ausführung von Programmen: Programme und Prozesse laden [ID:16467]
50 von 176 angezeigt

So in diesem Abschnitt will ich jetzt kurz darstellen, was dann tatsächlich passiert,

wenn man so ein fertig übersetztes Programm startet und dazu zuerst mal den Unterschied

zwischen einem Programm und einem Prozess einführen. Ein Programm ist eine Folge von

Anweisungen, die beispielsweise als ausführbare Datei auf dem Hintergrundspeicher hinterlegt ist.

So eine executable. Ein Programm ist natürlich auch ein C-Programm im Quellcode. Also es gibt

verschiedene Darstellungen von einem Programm in verschiedenen Sprachen kann man sagen. In C,

natürlich auch in Java oder eben auch in Intel Maschinencode. Letztendlich ja auch eine Sprache,

natürlich keine die für Menschen jetzt besonders gut verarbeitbar ist, aber für einen Prozess

und natürlich umso mehr. Also ein Programm ist einfach eine Folge von Anweisungen,

die irgendwo abgelegt ist. Ein Prozess ist ein Programm, das sich in Ausführung befindet,

zusammen mit seinen Daten. Und dabei muss man beachten, dass sich das gleiche Programm

durchaus mehrfach in Ausführung befinden kann. Also man kann sich das auch ganz leicht vorstellen.

Auf einem Rechner sind mehrere Benutzer angemeldet, eingeloggt und jeder solche

Benutzer hat gerade einen Edge-Short, zum Beispiel den VI oder den Vim, gestartet und gibt ein C-Quell-Programm ein.

Dieses Programm Vim ist ja auch ein ganz normales Programm und wenn zwei Benutzer diesen Vim starten,

dann läuft dieser Vim eben zweimal. Es ist das gleiche Programm, aber einmal für den einen

Benutzer, einmal für den anderen Benutzer. Das heißt, dieses Programm Vim hat in diesen

beiden Ausführungen natürlich unterschiedliche Daten. Ja und so was nennt man dann eben ein Prozess,

ein Programm in Ausführung. Ein Prozess ist erstmal ein abstraktes Gebilde. Das sind also

letztendlich die Funktionen und Datenstrukturen, die man braucht, um eine Programmausführung zu

verwalten. Und wenn Sie das im objektorientierten Sinn betrachten, dann ist ein Prozess eine Klasse.

Und ein konkreter Prozess, also das Programm Vim, das Sie als Benutzer gestartet haben und mit dem

Sie jetzt eine Datei Hallo.c editieren, das ist eine Prozessinstanz dann. Sie können ja auch als

ein Benutzer in verschiedenen Fenstern mehrfach den Editor wie Aish oder Vim starten und verschiedene

Dateien damit editieren. Und jede Vim-Instanz ist dann ein eigener Prozess oder eine eigene

Prozessinstanz. Manchmal findet man auch den Begriff Prozessinkarnation. Ich finde Prozessinstanz

eigentlich schöner, gerade auch im Vergleich zur objektorientierten Sicht, wo ich sage,

Prozess ist erstmal die Klasse. Der beschreibt, wie man einen Programmablauf verwaltet. Und die

Prozessinstanz ist dann eben das konkrete Gebilde. Das ist also eine konkrete Ausführungsumgebung für

ein Programm. Damit verbunden ist Speicher, damit verbunden sind Rechte, Zugriffsrechte und

Verwaltungsinformationen. Also wie lange rechnet zum Beispiel dieses Programm schon. Und das ist

dann eben auch im objektorientierten Sinn eine Instanz. In der Praxis ist der Sprachgebrauch

häufig sehr schlampig und wenn von Prozessen gesprochen wird, dann werden meistens Prozessinstanzen

gemeint, weil man sich so als Normalnutzer eigentlich über dieses abstrakte Gebilde und

wie ein Prozess verwaltet wird im Betriebssystem ja überhaupt keine Gedanken macht, sondern man

interessiert sich eigentlich nur für die Prozesse, die man halt selber gestartet hat. Und das sind

dann eben die Instanzen. Schauen wir uns erstmal die Speicherorganisation eines Programms an,

so wie der Compiler oder der Linker das am Ende erzeugt. Definiert ist diese Speicherorganisation

durch das L-Format und ich habe das jetzt hier mal sehr einfach dargestellt. Das ganze beginnt,

in diesem Fall jetzt hier unten mit dem Header. In diesem Header sind Identifikatoren drin,

bisschen Verwaltungsinformation. Da steht unter Umständen auch drin, welchen Maschinencode diese

Datei enthält. Es gibt zum Teil auch, dass in einer solcher ausführbaren Datei Maschinencode für

unterschiedliche Prozessoren liegt. Also Apple hat das vor etlichen Jahren mal gemacht, als sie

vom PowerPC Prozessor auf den Intel Prozessor umgestiegen sind. Da haben sie eine Zeit lang in

ihren Executables im Endeffekt sowohl für PowerPC als auch für Intel den Code vorgehalten,

sodass man also das gleiche ausführbare Programm auf beiden Architekturen laufen lassen konnte. Und

solche Informationen steht dann in diesem Header drin. Danach kommt der Textbereich, das ist der

Programmcode. Also Textsegment und Code Segment sind eigentlich Synonyme. Das ist also der

eigentliche Programmcode, der eben aus dem C-Quellcode, den sie programmiert haben,

übersetzt wurde. Dann kommt ein Bereich Initialized Data, der beschreibt die initialisierten

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:17:17 Min

Aufnahmedatum

2020-05-25

Hochgeladen am

2020-05-25 09:46:25

Sprache

de-DE

Tags

module programmstruktur Variablen Datentypen Preprozessor Gültigkeit
Einbetten
Wordpress FAU Plugin
iFrame
Teilen